In the latter half of the twentieth century, there began a phenomenon known as the information revolution. While the information revolution is a historical development broader in scope than any one event or machine, no single device has come to represent the information revolution more than the digital electronic computer. The development of computer systems has surely been a revolution. Each year, computer systems grow faster, store more data, and provide more applications to their users.
A modern computer system is an enormously complex machine, usually having many sub-parts or subsystems, each of which may be concurrently performing different functions in a cooperative, although partially autonomous, manner. Typically, the system comprises one or more central processing units (CPUs) which form the heart of the system, and which execute instructions contained in computer programs. Instructions and other data required by the programs executed by the CPUs are stored in memory, which often contains many heterogenous components and is hierarchical in design, containing a base memory or main memory and various caches at one or more levels. At another level, data is also stored in mass storage devices such as rotating disk drives, tape drives, and the like, from which it may be retrieved and loaded into memory. The system also includes hardware necessary to communicate with the outside world, such as input/output controllers; I/O devices attached thereto such as keyboards, monitors, printers, and so forth; and external communication devices for communicating with other digital systems.
Each component of a digital computer system is itself a very complex instrument, having a design hierarchy which can mimic that of the system. For example, a disk drive storage device typically contains one or more spinning disks on which data is recorded, an actuator and transducers for accessing data on the disk, a central controller which executes a control program for controlling the operation of the device, motors for driving the spinning disk and the mechanical actuator, various drivers for the motor, actuator and transducer, sense amplification electronics for reading the transducer, internal communications interfaces among the various components, and an external communications interface for communicating data with the outside world. Within any such component, further design hierarchies may exist.
Although a general-purpose computer can be programmed to perform a variety of different tasks, the range of applications and environments in which computer systems and other digital devices will be used creates a demand for devices of differing sizes and configurations. Some computer systems are used primarily as servers, in which multiple users (who may be geographically isolated, using a heterogeneous mixture of computer systems and application software) access a centralized set of applications and common database. Other computer systems are used primarily as single-user devices, in which a single user performs a set of applications of interest to the user, locally stores data of interest to the user, and may optionally communicate with other computers as required to access external data. Still other computer systems may perform specialized functions, such as monitoring and controlling physical sensors, switches, motors, valves, and other controls. A special-purpose digital device may or may not even be considered a computer system, but contains many of the design attributes of a general-purpose computer system.
Many digital system components are implemented on integrated circuit chips. Improvements in the manufacture and design of integrated circuitry have made it possible to place a very large number of active devices, such as transistors, on a single integrated circuit chip. This in turn makes it possible for a single chip to perform complex functions of a digital device. For some years now, it has been possible to implement a complete CPU on a single integrated circuit chip, and more recent CPUs contain on-chip caches and other components. Other integrated circuit chips are used to perform custom functions, such as memory device controllers, I/O device controllers, bus controllers, adapters and repeaters, and so forth
In any computer system or other digital device, there is a need to provide communications paths, generally called buses, for interconnecting various components of the system. Buses can be used to provide communications among different integrated circuit chips, or among different internal components of a single integrated circuit chip. The characteristics of these buses vary depending on the uses to which they will be put. For example, the volume of data traversing a bus, the physical length of the bus, the types of devices attached to the bus, and so forth will affect bus design.
Because many different types of devices may be attached to a bus, each operating at a different speed, performing a different function and located in a different location, a bus generally provides a flow control mechanism which prevents data from being sent by a first device when a second device is not ready. For example, a flow control mechanism may be a “not ready” signal that indicates the receiving device is not ready to receive data, or a “retry” signal that rejects data transactions the receiver can not accept.
One known form of flow control mechanism is a credit-based control mechanism, whereby a sending device receives an allocation of credits to transmit data on the bus. Credits may represent buffer capacity in the receiver, or some other form of capability of the receiver to receive data. When the sender transmits data on the bus, it decrements its allocation of credits. When the receiver restores the capacity to receive additional data, it returns the credit to the sender. The sender is thus allowed to transmit data immediately on the bus, without asking permission of the receiver, so long as it has credits available. If the sender ever runs out of credits, it is temporarily prevented from sending additional data to the receiver.
The purpose of a credit-based mechanism would be defeated if the sender had to ask the receiver for the number of available credits each time it wished to transmit. Therefore, when using a credit-based flow control mechanism, the sender maintains a local record of the number of credits available. This record is continually being updated as the sender sends data on the bus (decrementing the number of credits) and the receiver returns credits to the sender (incrementing the number of credits).
Conventionally, credits are returned by the receiver as a single bit credit pulse on a credit return line of the bus. Credits may also be returned by periodic messages from the receiver. For any of various reasons, a discrepancy may arise between the sender's local record of credits available and actual credits available at the receiver, i.e., actual capacity of the receiver to receive additional data. For brevity, such a discrepancy is herein referred to as a credit “loss”, it being understood that a discrepancy could also arise as a result of the sender having extra credit in its local record.
In order to correct credit loss, it is known to periodically reset the sender's local record of credits available. For example, a receiver may periodically send a transmission to the sender containing the receiver's credit count. Such a transmission may be sent as an ordinary bus communication having its own command code or type, most buses supporting bi-directional communications. This technique creates a small additional overhead. But more importantly, it is not designed to detect a credit loss—it only sets or resets the credit count to a value obtained from the receiver, whether the sender's local value was incorrect or not.
In some circumstances, it may be desirable to know that a credit loss has occurred. In the case of a chip internal bus, any credit loss is probably indicative of a hardware or design malfunction, which should be recorded and reported. In the case of an external bus, where noise or other factors may be expected to cause occasional credit losses, excessive credit loss may indicate unreliable connections, weak drivers, etc., any of which should be recorded and reported. It would be desirable to provide a means for not only resetting credit values, but for detecting and reporting credit losses in a communications bus, which does not impose an undue overhead on the operation of the bus.